name: CI

on: [push, pull_request]

permissions:
  contents: read # to fetch code (actions/checkout)

jobs:
  build:
    concurrency:
      group: ${{ github.workflow }}-${{ github.ref }}-${{ matrix.platform }}-${{ matrix.node }}
      cancel-in-progress: true

    strategy:
      fail-fast: false
      matrix:
        node:
          - '18.12'
          - '20'
          - '21'
        platform:
          - ubuntu-latest
          - windows-latest

    name: '${{matrix.platform}} / Node.js ${{ matrix.node }}'
    runs-on: ${{matrix.platform}}

    steps:
    - name: Configure Git
      run: |
        git config --global core.autocrlf false
        git config --global user.name "xyz"
        git config --global user.email "x@y.z"
    - name: Checkout Commit
      uses: actions/checkout@v3
    - name: Install pnpm
      uses: pnpm/action-setup@v3.0.0
      with:
        version: next-9
        standalone: true
    - name: Setup Node
      uses: actions/setup-node@v3
      with:
        node-version: ${{ matrix.node }}
        cache: 'pnpm'
    - name: Install npm@7
      run: npm add --global npm@7
    - name: pnpm install
      run: pnpm install
    - name: Audit
      run: pnpm audit
    # - name: Cache TypeScript and Jest
      # uses: actions/cache@v3
      # with:
        # path: |
          # packages/*/lib
          # packages/*/tsconfig.tsbuildinfo
          # privatePackages/*/lib
          # privatePackages/*/tsconfig.tsbuildinfo
          # .jest-cache
          # .verdaccio-cache
        # key: ts-jest-${{ matrix.platform }}-${{ matrix.node }}-${{ github.run_id }}
        # restore-keys: ts-jest-${{ matrix.platform }}-${{ matrix.node }}-
    - name: run tests (main)
      timeout-minutes: 60
      if: github.ref == 'refs/heads/main'
      run: pnpm run test-main
      env:
        PNPM_WORKERS: 3
    - name: run tests (branch)
      timeout-minutes: 60
      if: github.ref != 'refs/heads/main'
      run: pnpm run test-branch
      env:
        PNPM_WORKERS: 3
